<?php
/**
* Html 클래스 정의(XHTML)
* @package Utility
* @since 2005-08-11
* @update 2010-02-24
* @version 5.6.0
* @author hamhaja <hamhaja@nextez.co.kr>
**/
if (!class_exists('Html'))
{
	/**
	* 년/월/일에 대한 매크로 상수
	**/
	define('DAY', 0x01);
	define('MONTH', 0x02);
	define('MONTH_DAY', 0x03);
	define('YEAR', 0x04);
	define('YEAR_DAY', 0x05);
	define('YEAR_MONTH', 0x06);
	define('YEAR_MONTH_DAY', 0x07);
	define('SECOND', 0x01);
	define('MIN', 0x02);
	define('MIN_SECOND', 0x03);
	define('HOUR', 0x04);
	define('HOUR_SECOND', 0x05);
	define('HOUR_MIN', 0x06);
	define('HOUR_MIN_SECOND', 0x07);

	class Html
	{
		/**
		* @param boolean $_is_name_upper
		**/
		var $_is_name_upper;

		/**
		* PHP 5 Constructor
		**/
		function __construct()
		{
			$this->_is_name_upper = false;
		}

		/**
		* Constructor
		*/
		function Html()
		{
			$this->__construct();
		}

		/**
		* 체크박스 HTML코드를 생성하여 반환한다.
		* @param string $name 객체명
		* @param array $array 생성값
		* @param array $check_list 체크되어질 필드 목록
		* @param string $value_field Value로 선택되어질 필드
		* @param string $text_field Text로 선택되어질 필드
		* @param string $on_click 버튼클릭시 실행부
		* @param array $br_list <BR>이 첨부될 필드목록
		* @param boolean $disabled 활성화여부
		* @return string 체크박스 HTML코드
		* @version 5.0.0
		* @author Moon <mjsh99@nextez.co.kr>
		**/
		function check_button($name, $array, $check_list=array(), $value_field='_key', $text_field='_value', $on_click='', $br_list=array(), $disabled=false,$names=false,$validate=false)
		{
			$return = '';
			if (!count($array)) return '';
			if (!empty($on_click)) $on_click = " onclick=\"" . str_replace("\"", "'", $on_click) . "\"";
			if ($disabled) $disabled = " disabled=\"true\"";

			foreach ($array as $key => $value)
			{
				// 옵션의 Value 설정
				if (!is_array($value) || !array_key_exists($value_field, $value)) $value_field = '_key';
				if ($value_field === '_key') $el_value = $key;
				else if ($value_field === '_value') $el_value = $value;
				else $el_value = $value[$value_field];
				// 옵션의 Text 설정
				if (!is_array($value) || !array_key_exists($text_field, $value)) $text_field = '_value';
				if ($text_field === '_key') $el_text = $key;
				else if ($text_field === '_value') $el_text = $value;
				else $el_text = $value[$text_field];
				// 선택여부
				$checked = in_array($el_value, $check_list) ? " checked=\"checked\"" : "";

				if($names) $name = $el_value;
				// 코드추가

				$return .= "<input type=\"checkbox\" name=\"{$name}\" id=\"{$name}_{$key}\" value=\"{$el_value}\"{$checked}{$on_click}{$disabled} {$validate} />";
				$return .= "<label for=\"{$name}_{$key}\">{$el_text}</label>";
				if (in_array($el_value, $br_list)) $return .= '<br />';
			}
			return $return;
		}

		/**
		* 체크버튼의 요소를 배열에 담아서 반환한다.
		* @param string $name 객체명
		* @param array $array 생성값
		* @param array $check_list 체크되어질 필드 목록
		* @param string $value_field Value로 선택되어질 필드
		* @param string $text_field Text로 선택되어질 필드
		* @param string $on_click 버튼클릭시 실행부
		* @param string $check_style 체크되어질 필드의 CSS
		* @return string 체크박스 HTML코드
		* @version 5.2.0
		**/
		function check_button_els($name, $array, $check_list=array(), $value_field='_key', $text_field='_value', $on_click='', $check_style='')
		{
			$els = array();
			if (!count($array)) return $els;
			if (!empty($on_click)) $on_click = " onclick=\"" . str_replace("\"", "'", $on_click) . "\"";

			foreach ($array as $key => $value)
			{
				// 옵션의 Value 설정
				if (!is_array($value) || !array_key_exists($value_field, $value)) $value_field = '_key';
				if ($value_field === '_key') $el_value = $key;
				else if ($value_field === '_value') $el_value = $value;
				else $el_value = $value[$value_field];
				// 옵션의 Text 설정
				if (!is_array($value) || !array_key_exists($text_field, $value)) $text_field = '_value';
				if ($text_field === '_key') $el_text = $key;
				else if ($text_field === '_value') $el_text = $value;
				else $el_text = $value[$text_field];
				// check element css
				$style = (in_array($el_value, $check_list) && $check_style) ? " class=\"{$check_style}\"" : "";

				// 선택여부
				$checked = in_array($el_value, $check_list) ? " checked=\"checked\"" : "";
				// 코드추가
				$els[] .= "<input type=\"checkbox\" name=\"{$name}\" id=\"{$name}_{$key}\" value=\"{$el_value}\" {$checked}{$on_click}{$disabled} /><label for=\"{$name}_{$key}\"{$style}>{$el_text}</label>";
			}
			return $els;
		}

		/**
		* 날짜를 선택 가능하도록 하는 SELECT BOX 폼 구성 요소 생성
		* @param mixed $prefix 날짜 타입의 데이터 필드 이름 (각 구성요소 이름의 접미사). 배열인경우는 배열형태로 구성.
		* @param string $select_date 선택날짜(YYYY-MM-DD)
		* @param integer $start_year 년도 요소의 시작 년도
		* @param integer $end_year 년도 요소의 끝 년도
		* @param string $format 사용될 날짜 형태 추가(2005.01.05, by qkqhtkwk)
		* @param string $on_change change시 실행될 이벤트 핸들러(2005.01.17, by qkqhtkwk)
		* @param array $seps 각 구성요소뒤에 표시할 구분자 목록
		* @param boolean $add_default 기본 OPTION 포함여부
		* @return string 날짜 SELECT BOX HTML 코드
		* @version 5.0.1
		**/
		function date_select_form($prefix='', $select_date='', $start_year=1970, $end_year=2010, $format=YEAR_MONTH_DAY, $on_change='', $seps=array('&nbsp;년&nbsp;','&nbsp;월&nbsp;','&nbsp;일&nbsp;',''), $add_default=true)
		{
			// init
			$html = '';
			if ($select_date == '')
			{
				$select_year = '';
				$select_month = '';
				$select_day = '';
			}
			else
			{
				$select_year = substr($select_date, 0, 4);
				$select_month = substr($select_date, 5, 2);
				$select_day = substr($select_date, 8, 2);
			}
			$org_prefix = $prefix;
			if (is_array($org_prefix))
			{
				$prefix = $org_prefix[0] . '[' . $org_prefix[1];
				$postfix = ']';
			}
			else $postfix = '';
			if (!empty($prefix)) $prefix .= '_';
			$name_year	= $this->_is_name_upper ? $prefix . 'YEAR' . $postfix : $prefix . 'year' . $postfix;
			$name_month	= $this->_is_name_upper ? $prefix . 'MONTH' . $postfix : $prefix . 'month' . $postfix;
			$name_day	= $this->_is_name_upper ? $prefix . 'DAY' . $postfix : $prefix . 'day' . $postfix;
			if (!empty($on_change)) $on_change = " onchange=\"" . str_replace("\"", "'", $on_change) . "\"";
			// 년 선택폼
			if ($format & 4)
			{
				$html .= "<select name=\"{$name_year}\" id=\"{$name_year}\" title=\"년도\" {$on_change}>";
				if ($add_default) $html .= "<option value=\"\">====</option>";
				if (!empty($seps[3])) $html .= "<option value=\"\">{$seps[3]}</option>";
				if ($start_year < $end_year)
				{
					for ($i=$start_year; $i<=$end_year; $i++)
					{
						$select = ($i == $select_year) ? " selected=\"selected\"" : "";
						$html .= "<option value=\"{$i}\"{$select}>{$i}</option>";
					}
				}
				else
				{
					for ($i=$start_year; $i>=$end_year; $i--)
					{
						$selected = ($i == $select_year) ? " selected=\"selected\"" : "";
						$html .= "<option value=\"{$i}\"{$selected}>{$i}</option>";
					}
				}
				$html .= "</select>" . $seps[0];
			}
			// 월 선택폼
			if ($format & 2)
			{
				$html .= "<select name=\"{$name_month}\" id=\"{$name_month}\" title=\"월\" {$on_change}>";
				if ($add_default) $html .= "<option value=\"\">==</option>";
				if (!empty($seps[3])) $html .= "<option value=\"\">{$seps[3]}</option>";
				for ($i=1; $i<=12; $i++)
				{
					$v = $i;
					if ($i < 10) $v = '0'.$i;
					$selected = ($v == $select_month) ? " selected=\"selected\"" : "";
					$html .= "<option value=\"{$v}\"{$selected}>{$v}</option>";
				}
				$html .= "</select>" . $seps[1];
			}
			// 일 선택폼
			if ($format & 1)
			{
				$html .= "<select name=\"{$name_day}\" id=\"{$name_day}\" title=\"일\" {$on_change}>";
				if ($add_default) $html .= "<option value=\"\">==</option>";
				if (!empty($seps[3])) $html .= "<option value=\"\">{$seps[3]}</option>";
				for ($i=1; $i<=31; $i++)
				{
					$v = $i;
					if ($i < 10) $v = '0'.$i;
					$select = '';
					$selected = ($v == $select_day) ? " selected=\"selected\"" : "";
					$html .= "<option value=\"{$v}\"{$selected}>{$v}</option>";
				}
				$html .= "</select>" . $seps[2];
			}
			return $html;
		}

		/**
		* @see flag_radio_button()
		* @version 5.1.0
		**/
		function flag_button($name, $check=true, $on_click='', $labels=array('','',true))
		{
			return $this->flag_radio_button($name, $check, $on_click, $labels);
		}

		/**
		* 플래그 라디오버튼 HTML 코드를 반환한다.
		* @param string $name 객체명
		* @param boolean $check 체크되어질 필드(true, false)
		* @param string $on_click 버튼클릭시 실행부
		* @param array $labels 첨부될 레이블, 배열의 3번째 인자는 기본모드 사용여부
		* @return string 라디오버튼 HTML 코드
		* @version 5.0.0
		**/
		function flag_radio_button($name, $check=true, $on_click='', $labels=array('','',true))
		{
			$return = '';
			$on_click = empty($on_click) ? '' : " onclick=\"" . str_replace("\"", "'", $on_click) . "\"";
			$check_true = $check ? " checked=\"checked\"" : "";
			$check_false = $check ? "" : " checked=\"checked\"";
			if (!isset($labels[0])) $labels[0] = '';
			if (!isset($labels[1])) $labels[1] = '';
			if (!isset($labels[2])) $labels[2] = true;
			if (empty($labels[1])) $label_true = '예';
			else if ($labels[2]) $label_true = '예, ' . $labels[1];
			else $label_true = $labels[1];
			if (empty($labels[0])) $label_false =  '아니오';
			else if ($labels[2]) $label_false = '아니오, ' . $labels[0];
			else $label_false = $labels[0];
			// 코드생성
			$return .= "<input type=\"radio\" id=\"{$name}_1\" name=\"{$name}\" value=\"1\"{$check_true}{$on_click} /> <label for=\"{$name}_1\">{$label_true}</label>&nbsp;";
			$return .= "<input type=\"radio\" id=\"{$name}_0\" name=\"{$name}\" value=\"0\"{$check_false}{$on_click} /> <label for=\"{$name}_0\">{$label_false}</label>";

			return $return;
		}

		/**
		* full 선택폼 생성
		* @see select_form
		* @version 5.0.0
		**/
		function full_select_form($name, $array, $select_value='', $value_field='_key', $text_field='_value', $on_change='', $style='', $size='')
		{
			return $this->select_form($name, $array, $select_value, $value_field, $text_field, $on_change, $style, $size, 'full');
		}

		/**
		* URL 인코드한 쿼리 문자열을 생성합니다.
		* @param mixed $formdata 배열이나 속성을 가지는 객체
		* @param string $numeric_prefix 숫자인덱스앞에 붙여질 변수명
		* @param string $key formdata 복잡한 데이타인경우의 키값
		* @return string URL 인코딩 문자열
		* @version 5.0.0
		**/
		function http_build_query($formdata, $numeric_prefix = null, $key = null)
		{
			$res = array();
			foreach ((array)$formdata as $k => $v)
			{
				$tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k);
				if ($key) $tmp_key = $key . '[' . $tmp_key . ']';
				if (is_array($v) || is_object($v)) $res[] = $this->http_build_query($v, null, $tmp_key);
				else $res[] = $tmp_key . "=" . urlencode($v);
			}
			$separator = ini_get('arg_separator.output');
			return implode($separator, $res);
		}

		/**
		* 정렬(order) 선택박스 폼
		* @see select_form
		* @version 5.6.0
		**/
		function order_select_form($name, $sort, $select_value, $key)
		{
			$array = range(1, $sort);
			$on_change = "g_change_order(this, '{$key}')";
			$on_click = "g_click_order(this);";

			return $this->select_form($name, $array, $select_value, '_value', '_value', $on_change, '', '', 'full', '', '', $on_click);
		}

		/**
		* 페이지 번호 목록의 코드를 반환.
		* @param integer $total_cnt 전체 레코드 수
		* @param string $path 링크경로
		* @param integer $page 출력페이지,
		* @param integer $page_name 페이지변수명
		* @param integer $unit_record 출력레코드 단위수
		* @param integer $unit_page 출력페이지 단위수
		* @param string $subinfo 링크부가정보
		* @param array $icons 아이콘
		* @return string 페이지 번호 전체코드..
		* @version 5.0.0
		**/
		function print_paging($total_cnt, $path, $page, $page_name='page', $unit_record=10, $unit_page=10, $subinfo='', $icons=array())
		{
			// 초기화
			$return = '';
			if ($total_cnt == 0 || $unit_record == 0 || $unit_page == 0) return '';
			// 링크부가정보변환
			if (!empty($subinfo))
			{
				parse_str($subinfo, $array);
				if (isset($array[$page_name])) unset($array[$page_name]);
				$subinfo = $this->http_build_query($array);
			}
			if (empty($page_name)) $page_name = 'page';
			// 아이콘 초기화
			if (!isset($icons['first'])) $icons['first'] = '◀◀';
			if (!isset($icons['prev'])) $icons['prev'] = '◁';
			if (!isset($icons['next']))	$icons['next'] = '▷';
			if (!isset($icons['last'])) $icons['last'] = '▶▶';
			if (!isset($icons['type'])) $icons['type'] = '[%d]';
			if (!isset($icons['partition'])) $icons["partition"] = "&nbsp;";
			if (!isset($icons["self"])) $icons["self"] = "<strong>[%d]</strong>";
			// 산출
			$total_page	= ceil($total_cnt / $unit_record);		// 전체 페이지 수
			$total_block = ceil($total_page / $unit_page);		// 전체 블럭 수
			$this_block	= ceil($page / $unit_page);				// 현재 블럭
			$first_page	= ($this_block - 1) * $unit_page + 1;	// 출력 첫번째 페이지
			$end_page = $this_block * $unit_page;				// 출력 마지막 페이지
			$prev_block	= $this_block - 1;						// 이전 블럭
			$next_block = $this_block + 1;						// 다음 블럭
			if ($end_page > $total_page) $end_page = $total_page;

			// 이전블럭추가
			if ($prev_block)
			{
				$prev_block_page = $first_page - 1;
				if ($prev_block_page != 1)
				{
					$tmp_url = $path . "?" . $subinfo . "&" . $page_name . "=1";
					$tmp_url = str_replace("&", "&amp;", $tmp_url);
					$return .= "<a href=\"{$tmp_url}\">{$icons['first']}</a>&nbsp;";
				}

				$tmp_url = $path . "?" . $subinfo . "&" . $page_name . "=" . $prev_block_page;
				$tmp_url = str_replace("&", "&amp;", $tmp_url);
				$return .= "<a href=\"{$tmp_url}\">{$icons['prev']}</a>&nbsp;&nbsp;";
			}
			else
			{
				//$return .= "{$icons['first']}&nbsp;";
				//$return .= "{$icons['prev']}&nbsp;&nbsp;";
			}
			// 페이징 추가
			for ($i=$first_page; $i<=$end_page; $i++)
			{
				if ($i != $page)
				{
					$tmp_url = $path . "?" . $subinfo . "&" . $page_name . "=" . $i;
					$tmp_url = str_replace("&", "&amp;", $tmp_url);
					$return .= "<span><a href=\"{$tmp_url}\">" . sprintf("{$icons['type']}", $i) . '</a></span>';
				}
				else $return .= sprintf("{$icons['self']}", $i);
				if ($i != $end_page) $return .= $icons['partition'];
			}
			// 다음블럭추가
			if ($this_block < $total_block)
			{
				$next_block_page = $end_page + 1;
				$tmp_url = $path . "?" . $subinfo . "&" . $page_name . "=" . $next_block_page;
				$tmp_url = str_replace("&", "&amp;", $tmp_url);
				$return .= "&nbsp;&nbsp;<a href=\"{$tmp_url}\">{$icons['next']}</a>";
				if ($next_block_page != $total_page)
				{
					$tmp_url = $path . "?" . $subinfo . "&" . $page_name . "=" . $total_page;
					$tmp_url = str_replace("&", "&amp;", $tmp_url);
					$return .= "&nbsp;<a href=\"{$tmp_url}\">{$icons['last']}</a>";
				}
			}
			return $return;
		}

		/**
		* 페이지를 이동하는 HTML 코드를 반환합니다.
		* @param string $url 이동 페이지
		* @return 페이지 이동 코드
		* @version 5.0.0
		**/
		function redirect($url)
		{
			return "<meta http-equiv=\"refresh\" content=\"0; URL={$url}\">";
		}

		/**
		* 플래그 라디오버튼 HTML 코드를 반환한다.
		* @param string $name 객체명
		* @param array $array 출력되어질 값을 담은 배열
		* @param string $check 선택되어질 필드
		* @param string $value_field 옵션의 Value로 선택되어질 필드
		* @param string $text_field 옵션의 Text로 선택되어질 필드
		* @param string $on_click 버튼클릭시 실행부
		* @param array $br_list <BR>이 첨부될 필드목록
		* @return string 라디오버튼 HTML 코드
		* @author Moon <mjsh99@nextez.co.kr>
		* @version 5.0.0
		**/
		function radio_button($name, $array, $check='', $value_field='_key', $text_field='_value', $on_click='', $br_list=array())
		{
			$return = '';
			$i = 0;
			$on_click = empty($on_click) ? '' : " onclick=\"" . str_replace("\"", "'", $on_click) . "\"";
			// 코드생성
			foreach ($array as $key => $value)
			{
				// 옵션의 Value 설정
				$tmp_value_field = $value_field;
				if ($tmp_value_field != '_value')
				{
					if (!is_array($value) || !array_key_exists($tmp_value_field, $value)) $tmp_value_field = '_key';
				}
				if ($tmp_value_field == '_key') $option_value = $key;
				else if ($tmp_value_field == '_value') $option_value = $value;
				else $option_value = $value[$tmp_value_field];
				// 옵션의 Text 설정
				$tmp_text_field = $text_field;
				if ($tmp_text_field != '_key')
				{
					if (!is_array($value) || !array_key_exists($tmp_text_field, $value)) $tmp_text_field = '_value';
				}
				if ($tmp_text_field == '_key') $option_text = $key;
				else if ($tmp_text_field == '_value') $option_text = $value;
				else $option_text = $value[$tmp_text_field];

				$id = $name . $i;
				$is_check = ($check == $key) ? " checked=\"checked\"" :  "";
				$return .= "<input type=\"radio\" id=\"{$id}\" name=\"{$name}\" value=\"{$option_value}\"{$is_check}{$on_click} />&nbsp;<label for=\"{$id}\">{$option_text}</label>&nbsp;";
			    if (in_array($key, $br_list)) $return .= '<br />';
				$i++;
			}

			return $return;
		}

		/**
		* 라디오버튼의 요소를 배열에 담아서 반환한다.
		* @param string $name 객체명
		* @param array $array 생성값
		* @param array $check 선택되어질 필드
		* @param string $value_field Value로 선택되어질 필드
		* @param string $text_field Text로 선택되어질 필드
		* @param string $on_click 버튼클릭시 실행부
		* @return string 라디오버튼 HTML코드
		* @version 5.3.0
		* @author btslove <btslove@nextez.co.kr>
		**/
		function radio_button_els($name, $array, $check='', $value_field='_key', $text_field='_value', $on_click='')
		{
			$els = array();
			if (!count($array)) return $els;
			if (!empty($on_click)) $on_click = " onclick=\"" . str_replace("\"", "'", $on_click) . "\"";

			foreach ($array as $key => $value)
			{
				// 옵션의 Value 설정
				if (!is_array($value) || !array_key_exists($value_field, $value)) $value_field = '_key';
				if ($value_field === '_key') $el_value = $key;
				else if ($value_field === '_value') $el_value = $value;
				else $el_value = $value[$value_field];
				// 옵션의 Text 설정
				if (!is_array($value) || !array_key_exists($text_field, $value)) $text_field = '_value';
				if ($text_field === '_key') $el_text = $key;
				else if ($text_field === '_value') $el_text = $value;
				else $el_text = $value[$text_field];
				// 선택여부
				$checked = ($el_value == $check) ? " checked=\"checked\"" : "";
				// 코드추가
				$els[] .= "<input type=\"radio\" name=\"{$name}\" id=\"{$name}_{$key}\" value=\"{$el_value}\" {$checked}{$on_click} /><label for=\"{$name}_{$key}\">{$el_text}</label>";
			}
			return $els;
		}

		/**
		* 선택폼 HTML 코드를 반환한다.
		* @param string $name 객체명
		* @param array $array 생성값
		* @param string $select_value 기본선택되어질 값
		* @param string $value_field 옵션의 Value로 선택되어질 필드
		* @param string $text_field 옵션의 Text로 선택되어질 필드
		* @param string $on_change change시 실행될 이벤트 핸들러
		* @param string $style 선택폼의 스타일
		* @param string $size 선택폼의 사이즈
		* @param string $class 적용 스타일 클래스
		* @return string 선택폼 HTML 코드
		* @version 5.0.0
		**/
		function select_form($name, $array, $select_value='', $value_field='_key', $text_field='_value', $on_change='', $style='', $size='', $class='', $disabled='', $add='', $onclick='', $title='')
		{
			$return = '';
			if (!empty($on_change)) $on_change = " onchange=\"" . str_replace("\"", "'", $on_change) . "\"";
			if (!empty($style)) $style = " style=\"{$style}\"";
			if (!empty($size)) $size = " size=\"{$size}\"";
			if (!empty($class)) $class = " class=\"{$class}\"";
			if (!empty($disabled)) $disabled = " disabled=\"disabled\"";
			if (!empty($onclick)) $onclick = " onclick=\"" . str_replace("\"", "'", $onclick) . "\"";
			if (!empty($title)) $title = " title=\"" . str_replace("\"", "'", $title) . "\"";

			if (!is_array($array)) user_error('The argument should be an array [array]', E_USER_ERROR);
			// 코드생성
			$return .= "<select name=\"{$name}\" id=\"{$name}\"{$on_change}{$style}{$size}{$class}{$disabled}{$add}{$onclick}{$title}>";
			foreach ($array as $key => $value)
			{
				// 옵션의 Value 설정
				$tmp_value_field = $value_field;
				if ($tmp_value_field != '_value')
				{
					if (!is_array($value) || !array_key_exists($tmp_value_field, $value)) $tmp_value_field = '_key';
				}
				if ($tmp_value_field == '_key') $option_value = $key;
				else if ($tmp_value_field == '_value') $option_value = $value;
				else $option_value = $value[$tmp_value_field];
				// 옵션의 Text 설정
				$tmp_text_field = $text_field;
				if ($tmp_text_field != '_key')
				{
					if (!is_array($value) || !array_key_exists($tmp_text_field, $value)) $tmp_text_field = '_value';
				}
				if ($tmp_text_field == '_key') $option_text = $key;
				else if ($tmp_text_field == '_value') $option_text = $value;
				else $option_text = $value[$tmp_text_field];
				// 선택여부
				$selected = ($option_value == $select_value) ? " selected=\"selected\"" : "";
				// 옵션추가
				$return .= "<option value=\"{$option_value}\"{$selected}>{$option_text}</option>";
			}
			$return .= "</select>";
			return $return;
		}


		/**
		* 시간을 선택 가능하도록 하는 SELECT BOX 폼 구성 요소 생성
		* @param mixed $prefix 시간 타입의 데이터 필드 이름 (각 구성요소 이름의 접미사). 배열인경우는 배열형태로 구성.
		* @param string $select_time 선택시간(H:i:s)
		* @param integer $start_hour 시작 시각
		* @param integer $end_hour 끝 시각
		* @param string $format 사용될 시간 형태
		* @param string $on_change change시 실행될 이벤트 핸들러(2005.01.17, by qkqhtkwk)
		* @param array $seps 각 구성요소뒤에 표시할 구분자 목록
		* @param integer $min_step 연속적인 분 증가값
		* @param integer $second_step 연속적인 초 증가값
		* @return string 날짜 SELECT BOX HTML 코드
		* @version 5.0.0
		* @author Qkqhtkwk <qkqhtkwk@nextez.co.kr>
		**/
		function time_select_form($prefix='', $select_time='', $start_hour=0, $end_hour=23, $format=HOUR_MIN_SECOND, $on_change='', $seqs=null, $min_step=5, $second_step=5)
		{
			// init
			$html = '';
			if ($select_time == '')
			{
				$select_hour = date('H');
				$select_min = date('i');
				$select_second = date('s');
			}
			else
			{
				$select_hour = date('H', strtotime($select_time));
				$select_min = date('i', strtotime($select_time));
				$select_second = date('s', strtotime($select_time));
			}
			if (is_null($seqs)) $seqs = array(' 시 ', ' 분 ', ' 초 ', '');
			$org_prefix = $prefix;
			if (is_array($org_prefix))
			{
				$prefix = $org_prefix[0] . '[' . $org_prefix[1];
				$postfix = ']';
			}
			else $postfix = '';
			if (!empty($prefix)) $prefix .= '_';
			$name_hour		= $this->_is_name_upper ? $prefix . 'HOUR' . $postfix : $prefix . 'hour' . $postfix;
			$name_min		= $this->_is_name_upper ? $prefix . 'MIN' . $postfix : $prefix . 'min' . $postfix;
			$name_second	= $this->_is_name_upper ? $prefix . 'SECOND' . $postfix : $prefix . 'second' . $postfix;
			if (!empty($on_change)) $on_change = " onchange=\"" . str_replace("\"", "'", $on_change) . "\"";

			// 시간 선택폼
			if ($format & 4)
			{
				$html .= "<select name=\"{$name_hour}\"{$on_change}>";
				if (!empty($seqs[3])) $html .= "<option value=\"\">{$seqs[3]}</option>";
				if ($start_hour < $end_hour)
				{
					for ($i=$start_hour; $i<=$end_hour; $i++)
					{
						$v = $i;
						if ($i < 10) $v = '0'.$i;
						$select = ($v == $select_hour) ? " selected=\"selected\"" : "";
						$html .= "<option value=\"{$v}\"{$select}>{$v}</option>";
					}
				}
				else
				{
					for ($i=$start_hour; $i>=$end_hour; $i--)
					{
						$selected = ($i == $select_hour) ? " selected=\"selected\"" : "";
						$html .= "<option value=\"{$i}\"{$selected}>{$i}</option>";
					}
				}
				$html .= "</select>" . $seqs[0];
			}
			// 분 선택폼
			if ($format & 2)
			{
				$html .= "<select name=\"{$name_min}\"{$on_change}>";
				if (!empty($seqs[3])) $html .= "<option value=\"\">{$seqs[3]}</option>";
				if ($min_step < 1) $min_step = 1;
				for ($i=0; $i<60; $i=$i+$min_step)
				{
					$v = $i;
					if ($select_min % $min_step && $i >= $select_min) $select_min = $i;
					if ($i < 10) $v = '0'.$i;
					$selected = ($v == $select_min) ? " selected=\"selected\"" : "";
					$html .= "<option value=\"{$v}\"{$selected}>{$v}</option>";
				}
				$html .= "</select>" . $seqs[1];
			}
			// 초 선택폼
			if ($format & 1)
			{
				$html .= "<select name=\"{$name_second}\"{$on_change}>";
				if (!empty($seqs[3])) $html .= "<option value=\"\">{$seqs[3]}</option>";
				if ($second_step < 1) $second_step = 1;
				for ($i=0; $i<60; $i=$i+$second_step)
				{
					$v = $i;
					if ($select_second % $second_step && $i >= $select_second) $select_second = $i;
					if ($i < 10) $v = '0'.$i;
					$select = '';
					$selected = ($v == $select_second) ? " selected=\"selected\"" : "";
					$html .= "<option value=\"{$v}\"{$selected}>{$v}</option>";
				}
				$html .= "</select>" . $seqs[2];
			}
			return $html;
		}

		/**
		* 요일 체크폼 생성
		* @see check_button
		* @version 5.0.0
		**/
		function wday_check_button($name, $check_list=array(), $disabled=false, $names=false, $validate=false, $onclick=false)
		{
			$array = array('일', '월', '화', '수', '목', '금', '토');
			return $this->check_button($name, $array, $check_list, '_key', '_value',$onclick, array(), $disabled, $names, $validate);
		}
	}
}
?>